package com.wwy.arithmetic.suanfa;

import lombok.Data;

import java.util.HashSet;
import java.util.Set;

/**
 * 相交链表
 */
public class XiangJiaoLianBiao {
    @Data
    static class ListNode {
        //类名 ：Java类就是一种自定义的数据结构
        int val;            //数据 ：节点数据
        ListNode next;      //对象 ：引用下一个节点对象。在Java中没有指针的概念，Java中的引用和C语言的指针类似

        ListNode(int val) {
            //构造方法 ：构造方法和类名相同
            this.val = val;     //把接收的参数赋值给当前类的val变量
        }

    }

    public static void main(String[] args) {
        ListNode listNode = new ListNode(1);
        ListNode listNode1 = new ListNode(2);
//        ListNode listNode2 = new ListNode(3);
        listNode.setNext(listNode1);
     //   listNode1.setNext(listNode2);


        ListNode listNodea = new ListNode(3);
        ListNode listNodeb = new ListNode(4);
        listNodea.setNext(listNodeb);
        ListNode a = getIntersectionNode(listNode, listNodea);
    }

    static ListNode judege(ListNode headA, ListNode headB) {
        if (headA == null || headB == null) {
            return null;
        }
        Set<ListNode> listNodes = new HashSet<>();
        while (headA != null) {
            listNodes.add(headA);
            headA = headA.next;
        }
        while (headB != null) {
            if (!listNodes.add(headB)) {
                return headB;
            } else {
                headB = headB.next;
            }
        }
        return null;
    }


    public  static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if (headA == null || headB == null) {
            return null;
        }
        ListNode pA = headA, pB = headB;
        while (pA != pB) {
            pA = pA == null ? headB : pA.next;
            pB = pB == null ? headA : pB.next;
        }
        return pA;
    }
}
